Fix TPM support in HVM domains
authorkfraser@localhost.localdomain <kfraser@localhost.localdomain>
Tue, 15 May 2007 09:50:09 +0000 (10:50 +0100)
committerkfraser@localhost.localdomain <kfraser@localhost.localdomain>
Tue, 15 May 2007 09:50:09 +0000 (10:50 +0100)
Signed-off-by: Joseph Cihula <joseph.cihula@intel.com>
Signed-off-by: Peter Yang <peisen.yang@intel.com>
tools/examples/vtpm-impl
tools/ioemu/hw/tpm_tis.c

index 148e9dc187778a6ef974d69f5c42e9e965ed6445..4f9a1fd85e464f45ba2a21a604ffe1446b816c8e 100644 (file)
@@ -83,7 +83,7 @@ function vtpm_manager_cmd() {
  release_lock vtpm_mgr
 
  #return whether the command was successful
- if [ $resp_hex ne $TPM_SUCCESS ]; then
+ if [ $resp_hex -ne $TPM_SUCCESS ]; then
    vtpm_fatal_error=1
    false
   else
index 29bb14c9423afde2734c04c485478a6a54157673..39309809ada49825637b5679cb7f00e538d17bfa 100644 (file)
@@ -148,7 +148,7 @@ static int write_local_socket(tpmState *s, const tpmBuffer *);
 static int read_local_socket(tpmState *s, tpmBuffer *);
 static int close_local_socket(tpmState *s, int force);
 static int has_channel_local_socket(tpmState *s);
-#define LOCAL_SOCKET_PATH      "/var/vtpm/vtpm_all.socket"
+#define LOCAL_SOCKET_PATH     "/var/vtpm/socks/%d.socket" 
 
 
 #define NUM_TRANSPORTS 1
@@ -238,18 +238,33 @@ static int create_local_socket(tpmState *s, uint32_t vtpm_instance)
     if (s->tpmTx.fd[0] < 0) {
         s->tpmTx.fd[0] = socket(PF_LOCAL, SOCK_STREAM, 0);
 
+#ifdef DEBUG_TPM
+        fprintf(logfile," SOCKET FD %d errno %d \n",  s->tpmTx.fd[0], errno );
+#endif
         if (has_channel_local_socket(s)) {
+            int ret; 
             struct sockaddr_un addr;
             memset(&addr, 0x0, sizeof(addr));
             addr.sun_family = AF_LOCAL;
-            strcpy(addr.sun_path, LOCAL_SOCKET_PATH);
-            if (connect(s->tpmTx.fd[0],
-                        (struct sockaddr *)&addr,
-                        sizeof(addr)) != 0) {
+            snprintf(addr.sun_path, sizeof(addr.sun_path)-1,
+                    LOCAL_SOCKET_PATH, (uint32_t) vtpm_instance);
+#ifdef DEBUG_TPM
+           fprintf(logfile," SOCKET NAME %s \n",  addr.sun_path );
+#endif
+
+            if ((ret = connect(s->tpmTx.fd[0], (struct sockaddr *)&addr,
+                              sizeof(addr))) != 0) {
                 close_local_socket(s, 1);
+#ifdef DEBUG_TPM
+               fprintf(logfile," RET %d  errno %d\n", ret, errno );
+#endif
                 success = 0;
             } else {
                 /* put filedescriptor in non-blocking mode for polling */
+#ifdef DEBUG_TPM
+             fprintf(logfile," put filedescriptor in non-blocking mode "
+                     "for polling \n");
+#endif
                 int flags = fcntl(s->tpmTx.fd[0], F_GETFL);
                 fcntl(s->tpmTx.fd[0], F_SETFL, flags | O_NONBLOCK);
             }